#pragma once
#include <string>
// 定义一个抽象基类 KVDatabase，它包含所有键值存储操作的通用接口，包括插入、查询、删除、序列化和反序列化等。
template <typename Key, typename Value>
class KVDatabase {
public:
    virtual ~KVDatabase() = default;

    // 插入或更新键值对
    virtual bool put(const Key& key, const Value& value) = 0;

    // 查询键值对
    virtual bool get(const Key& key, Value& value) const = 0;

    // 判断键是否存在
    virtual bool exists(const Key& key) const = 0;

    // 删除键值对
    virtual bool remove(const Key& key) = 0;

    // 序列化：将当前数据库状态写入 data_str
    virtual bool serialize(std::string& data_str) const = 0;

    // 反序列化：从 data_str 加载数据库状态
    virtual bool deserialize(const std::string& data_str) = 0;

    // 获取当前键值对数量
    virtual size_t size() const = 0;
};